001    /**
002     * Created by IntelliJ IDEA.
003     * User: Wei Wang
004     * Date: Feb 26, 2003
005     * Time: 7:57:30 PM
006     */
007    
008    package EVolve.util.painters.placements;
009    
010    import EVolve.util.painters.shapes.Shape;
011    import EVolve.visualization.AutoImage;
012    import java.awt.*;
013    
014    public class RoundPlacement extends Placement{
015    
016        public RoundPlacement(int shapeSize) {
017            super();
018            this.shapeSize = shapeSize;
019        }
020    
021        public String getName() {
022            return "Round Placement";
023        }
024    
025        public Rectangle initialPlacement(AutoImage image) {
026            int totalShapes = parties[0].size() + parties[1].size();
027            int startX, startY;
028            double angle, radius, delta, x, y;
029    
030            if (parties[0] == parties[1]) totalShapes /= 2;
031    
032            radius = shapeSize/(Math.sin(Math.PI/totalShapes));
033            startX = startY = (int)radius+INDENT;
034            angle = 0;
035            delta = 2*Math.asin(shapeSize/radius);
036    
037            int i = 0,producerSize = parties[0].size();
038            while (i<totalShapes) {
039                for (int j=0; j<parties[i/producerSize].size(); j++) {
040                    Shape object = (Shape)parties[i/producerSize].get(new Integer(j));
041                    x = startX + radius * Math.cos(angle);
042                    y = startY + radius * Math.sin(angle);
043                    object.move((int)x-shapeSize/2,(int)y-shapeSize/2);
044                    angle += delta;
045                }
046                i += parties[i/producerSize].size();
047            }
048            Rectangle bounds = new Rectangle();
049            bounds.height = bounds.width = (int)(radius * 2 + shapeSize + INDENT*2);
050    
051            image.setImageWidth(bounds.width, bounds.height);
052    
053            return bounds;
054        }
055    
056    }